跳到主要内容

BM98 螺旋矩阵

https://www.nowcoder.com/practice/7edf70f2d29c4b599693dc3aaeea1d31

这道题目的话属于一道模拟题,只需要找出输出的规则和边界终止条件即可。

func spiralOrder(matrix [][]int) []int {
if len(matrix) == 0 {
return []int{}
}

var nums []int
top, bottom, right, left := 0, len(matrix)-1, len(matrix[0])-1, 0
for top < bottom && left < right {
// 上层
for i := left; i < right; i++ {
nums = append(nums, matrix[top][i])
}
// 右层
for i := top; i < bottom; i++ {
nums = append(nums, matrix[i][right])
}
// 下层
for i := right; i > left; i-- {
nums = append(nums, matrix[bottom][i])
}
// 左层
for i := bottom; i > top; i-- {
nums = append(nums, matrix[i][left])
}

right--
left++
top++
bottom--
}

if bottom == top {
for i := left; i <= right; i++ {
nums = append(nums, matrix[top][i])
}
} else if left == right {
for i := top; i <= bottom; i++ {
nums = append(nums, matrix[i][left])
}
}

return nums
}